const Router = require('koa-router')
const app = new Router()
const mongoose = require('mongoose')
const jwt = require('jsonwebtoken')
const secret = 'secret' // 令牌的盐

// 修改手机号要检查 请求中有没有 token
// 配置成动态路由
app.post('/:dynamic', async (ctx, next) => {
  const token = ctx.request.headers.token
  const param = ctx.request.body[ctx.params.dynamic]
  const authCode = ctx.request.body.authCode
  const dbphone = ctx.session.phone
  // console.log(param, dbphone)
  // 若是修改用户名则不需验证码
  if (ctx.params.dynamic == 'username') {
    console.log(ctx.params.dynamic)
    try {
      const table = mongoose.model('bee')
      await table.findOneAndUpdate({ phone: dbphone }, { username: param }, { useFindAndModify: false })
      console.log('111')
      ctx.body = {
        code: 200,
        msg: '修改成功',
        username: param
      }
      return
    } catch (err) {
      console.log(err)
      ctx.body = {
        code: 500,
        msg: '出现异常'
      }
      return
    }
  }
  // 这个是用来判断是否修改的是手机号 如果不是 则不需要重新生成token
  let flag = true
  if (ctx.params.dynamic != 'phone') {
    flag = false
  }
  // 首先需要判断验证码是否过期
  if ((+new Date() - ctx.session.time) > 60000) {
    ctx.body = {
      code: 401,
      msg: '验证码失效'
    }
    // 判断验证码是否相等
  } else {
    if (authCode == ctx.session.authCode) {
      // 在进行token 验证
      // console.log('2222')
      await jwt.verify(token, secret, async (err) => {
        // 没有出错 则进行数据的重新存储

        if (!err) {
          let newToken = null
          try {
            // console.log('333')
            const table = mongoose.model('bee')
            await table.findOneAndUpdate({ phone: dbphone }, { [ctx.params.dynamic]: param }, { useFindAndModify: false })
            // 更新成功后需做三个事, 更新session 更新token 向前端发送消息
            if (flag) {
              console.log('设置token')
              ctx.session.phone = param
              newToken = jwt.sign({ param }, secret,
                { expiresIn: '1h' } // 24小时过期
              )
            }

            ctx.body = {
              code: 200,
              msg: '更新成功',
              token: newToken || token,
              phone: param
            }
            // return next()
          } catch (err) {
            ctx.body = {
              code: 500,
              msg: '用户名存在'
            }
          }
          // console.log('11111')
        } else {
          console.log(err)
          ctx.body = {
            code: 501,
            msg: '未知错误'
          }
        }
      })
    } else {
      ctx.body = {
        code: 402,
        msg: '验证码错误'
      }
    }
  }
  // ctx.body = {
  //   msg: 'test'
  // }
})

module.exports = app
